package com.scud.product.service;

import com.scud.model.PageResult;
import com.scud.model.cart.vo.CartItemVo;
import com.scud.model.order.dto.FullOrderDto;
import com.scud.model.order.pojo.OrderDetails;
import com.scud.model.order.vo.ManageOrderVo;
import com.scud.model.order.vo.OrderSkuVo;
import com.scud.model.product.dto.ManagePageDto;
import com.scud.model.product.dto.ProductPageDto;
import com.scud.model.product.dto.SpecsSelectedDto;
import com.scud.model.product.pojo.Product;
import com.scud.model.product.vo.ManageProductDetailsVo;
import com.scud.model.product.vo.ProductDetailsVo;
import com.scud.model.product.vo.ProductSkuVo;

import java.util.List;
import java.util.Map;

public interface ProductService {

    ProductDetailsVo getProductDetails(Long id);

    PageResult<Product> pageByCateId(Integer categoryId, ProductPageDto productPageDto);

    List<Product> getBanner();

    List<Product> getNew();

    List<Product> homeNew();

    PageResult<Product> searchProduct(ProductPageDto dto);

    ProductSkuVo getSku(SpecsSelectedDto ssd);

    void deductStock(Map<Long, Integer> skuIds);

    List<OrderSkuVo> getOrderSkuVoList(List<OrderDetails> orderDetailsList);

    List<CartItemVo> getCartSku(List<CartItemVo> carList);

    void resetStock(Map<String, Integer> skus);

    PageResult<Product> manageProductPage(ManagePageDto dto);

    ManageProductDetailsVo getManageDetails(Long id);

    void updateProduct(ManageProductDetailsVo dto);

    void deleteProduct(Long productId);

    void updateStatus(Long productId, Short status);


    FullOrderDto completeInfo(FullOrderDto orderDto);

    List<ManageOrderVo> getManageOrderPage(List<ManageOrderVo> orderDetailsList);
}
